const express = require('express');
const { createServer } = require("http")
const socketModule = require("./utils/socket")
const cors = require('cors');
const mongoose = require('mongoose');
const cookieParser = require('cookie-parser');
const userRouter = require('./routes/userRouter');
const uploadRouter = require('./routes/uploadRouter');

const app = express();

// 往 Process Env 中添加环境变量
require("dotenv").config();

// 设置允许跨域访问
app.use(cors({
  origin: "http://localhost:3000",
  credentials: true // 允许跨域时携带 cookie，默认为 false， 如果这个功能不开启，但前端开启了 withCredentials，就还会报跨域错误
}));
// 设置解析 JSON 格式的请求体
app.use(express.json()); // 会注入

// cookie 解析
app.use(cookieParser());

// 路径前置带有 /api/auth 的请求都会被 userRouter 处理
app.use("/api/auth", userRouter)
app.use("/upload", uploadRouter)

// 连接 Mongodb 数据库
mongoose.connect(process.env.MONGO_URL).then(() => {
  console.log("Connected to MongoDB");
}).catch((err) => {
  console.log(err);
})

// 创建 HTTP 服务
const server = createServer(app)
// 升级为 WebSocket 服务
socketModule(server)

// 监听端口
server.listen(process.env.PORT, () => {
  console.log(`Server is running on port ${process.env.PORT}`)
})
